package day_2022_4_to_7.nowcoder;

/**
 * 反转单词序列
 * @author haomin
 * @date 2022/05/13 15:40
 **/
public class ReverseSentence_33f {
    public static void main(String[] args) {
        System.out.println(ReverseSentence2("abc de"));
    }
    // 方法一 字符串逆置 + 拼接
    public String ReverseSentence(String str) {
        // 1. 将字符串转为String 数组
        String[] data = str.split(" ");
        // 定义一个String类型的result
        String result = "";

        // 2. 倒着遍历数组，使result+=data[i]，result即为翻转后的结果。
        for(int i = data.length-1;i >= 0 ;i--){
            if(i == 0){
                result += data[i];
            }else{
                result += data[i] += " ";
            }
        }
        return result;
    }

    // 方法二 单个字符串逆置 + 总体逆置
    public static String ReverseSentence2(String str) {
        if(str == null || str.length() == 0){
            return str;
        }
        char[] data = str.toCharArray();
        int i = 0;
        int j = i;
        while (i < data.length){
            while (i < data.length && str.charAt(i) != ' ') i++;
            reverse(data,j,i-1);
            while (i < data.length && str.charAt(i) == ' ') i++;
            j = i;
        }
        reverse(data,j,i-1);
        reverse(data,0,i-1);
        return new String(data);
    }

    private static void reverse(char[] data, int start, int end) {
        while (start < end){
            char temp = data[start];
            data[start] = data[end];
            data[end] = temp;
            start++;
            end--;
        }
    }
}